対処法: Rustの高階関数の関数ポインタの戻り値型にimpl Traitを使えるようにする(Nightly)
#Nightly_Rust #Rust
やりたいこと
Rustの高階関数の関数ポインタの戻り値型にimpl Traitは使えないを対処したいとき。
やりかた
#![feature(type_alias_impl_trait)]を使ってimpl Traitの型エイリアスを作る。
直接imp Traitが書けていないことに注意。
例
pub fn f1() -> fn(i32) -> impl Iterator<Item=i32> { ... }みたいに書きたいときの対処法。
code:rs
#!feature(type_alias_impl_trait)
type IterI32 = impl Iterator<Item=i32>;
pub fn f1() -> fn(i32) -> IterI32 {
|i: i32| {
vec!i, i, i.into_iter()
}
}
fn main() {
let a = f1()(10);
for x in a {
println!("{}", x);
}
}
Nightly channel Build using the Nightly version: 1.45.0-nightly (2020-04-29 fa51f810e5b9254904b9)で動いた。
code:出力
10
10
10
参考: rust - Is it possible to use impl Trait as a function's return type in a trait definition? - Stack Overflow